package com.hashtab;

public class EmpLinkedList {
    //头指针
    private Emp head;

    /**
     * 假定添加雇员时id为自增长的，即每次添加都在添加都链表的尾部
     */
    public void add(Emp emp){
        //添加第一个雇员
        if(head == null){
            head = emp;
            return;
        }
        //如果不是第一个雇员，则使用辅助变量来添加，帮助定位到最后
        Emp temp = head;
        while(temp.next != null){
            temp = temp.next;
        }
        temp.next = emp;

    }
    /**
     * 遍历链表的雇员信息
     */
    public void showEmp(int n){
        //判断链表是否为空
        if(head == null){
            System.out.println("第"+(n+1)+"条链表表为空");
            return;
        }
        System.out.println("第"+(n+1)+"条链表信息为：");
        //定义辅助指针进行遍历
        Emp curEmp = head;
        do{
            System.out.println("id="+curEmp.id+" -> name="+curEmp.name);
            curEmp = curEmp.next;
        }while(curEmp!=null);

    }

    /**
     * 查找雇员：根据id进行查找
     */
    public Emp findEmpById(int id){
        //判断链表是否为空
        if(head == null){
            System.out.println("链表为空");
            return null;
        }
        //不为空，通过辅助指针来遍历链表进行查找
        Emp curEmp =  head;
        do {
            if(curEmp.id == id){
                return curEmp;
            }
            curEmp =curEmp.next;
        }while (curEmp !=null);
        return null;
    }

    /**
     * 删除雇员
     */
    public void deleteEmpById(int id) {
        if(head == null){
            System.out.println("链表为空");
            return;
        }
        Emp curEmp = head;
        boolean flag = false;
        //判断是否就是第一个节点
        if(curEmp.id == id){
            if(curEmp.next!=null){
               head = curEmp.next;
               return;
            }else{
                head = null;
                return;
            }
        }
        //判断剩余节点中是否存在该雇员
        while(curEmp.next!=null){
            if(curEmp.next.id == id){
                flag = true;
                break;
            }
            curEmp = curEmp.next;
        }
        //找到带查找雇员的前一个节点
        if(flag) {
            curEmp.next = curEmp.next.next;
        }else {
            System.out.println("没有找到编号为"+id+"的结点，删除失败");
        }

    }
}
